<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        Array.prototype.map=function(callback){
            const arr=[]
            //遍历当前数组每个元素,调用callback得到一个结果数据,添加arr
            for(let index=0;index<this.length;index++){
                const element=this[index]
                const result=callback(element,index)
                arr.push(result)
            }

            return arr
        } 
        Array.prototype.reduce=function(callback,initValue){
            let total=initValue
            //遍历当前数组每个元素,调用callback得到一个结果数据,添加arr
            for(let index=0;index<this.length;index++){
                const element=this[index]
                total=callback(total,element,index)
                
            }
            return total
        }
        Array.prototype.filter=function(callback){
            const arr=[]
            //遍历当前数组每个元素,调用callback得到一个结果数据,添加arr
            for(let index=0;index<this.length;index++){
                const element=this[index]
                const result=callback(element,index)
                if(result){
                    arr.push(element)
                }
                
            }
            return arr
        }
        Array.prototype.find=function(callback){
            const arr=[]
            //遍历当前数组每个元素,调用callback得到一个结果数据,添加arr
            for(let index=0;index<this.length;index++){
                const element=this[index]
                const result=callback(element,index)
                if(result){
                    return element
                }
                
            }
            return undefined
        }
        Array.prototype.findIndex=function(callback){
            const arr=[]
            //遍历当前数组每个元素,调用callback得到一个结果数据,添加arr
            for(let index=0;index<this.length;index++){
                const element=this[index]
                const result=callback(element,index)
                if(result){
                    return index
                }
            }
            return -1
        }
        Array.prototype.findIndex=function(callback){
            //遍历当前数组每个元素,调用callback得到一个结果数据,添加arr
            for(let index=0;index<this.length;index++){
                const element=this[index]
                const result=callback(element,index)
                if(!result){
                    return false
                }
            }
            return true
        }
        Array.prototype.some=function(callback){
            //遍历当前数组每个元素,调用callback得到一个结果数据,添加arr
            for(let index=0;index<this.length;index++){
                const element=this[index]
                const result=callback(element,index)
                if(result){
                    return true
                }
            }
            return false
        }
    </script>
    <script>
        /*         
        自定义实现一组数组声明式方法
            1.)  map()
            2.)  reduce()
            3.)  filter()
            4.)  find()
            5.)  findIndex()
            6.)  every()
            7.)  some() 
        */

        /*       
        需求:
            1. 产生一个每个元素都比原来大10得新数组
            2.得到所有奇数得和
            3.得到值大于8且下标是偶数位得元素组成得数组
            4.找出一个值大于8且下标是偶数位得元素
            5.找出一个值大于8且下标是偶数位得元素得下标
            6.判断下标位偶数得元素是否都为奇数
            7.判断是否有下标为偶数得元素值为奇数
        */

        const arr=[1,3,6,9,15,19,16]
        // 1. 产生一个每个元素都比原来大10得新数组
        console.log(arr.map((item,index)=>item+10))

        // 2.得到所有奇数得和
        console.log(arr.reduce((preTotal,item,index)=>{
            return preTotal + (item % 2 == 1 ? item : 0)
        },0))

        // 3.得到值大于8且下标是偶数位得元素组成得数组
        console.log(arr.filter((item,index)=>index%2==0&&item>8))

        // 4.找出一个值大于8且下标是偶数位得元素
        console.log(arr.find((item,index)=>index%2==0&&item>8))

        // 5.找出一个值大于8且下标是偶数位得元素得下标
        console.log(arr.findIndex((item,index)=>index%2==0&&item>8))

        // 6.判断下标位偶数得元素是否都为奇数
        console.log(arr.every((item,index)=>index%2==1||(index%2==0&&item%2==1)))

        // 7.判断是否有下标为偶数得元素值为奇数
        console.log(arr.some((item,index)=>index%2==1||(index%2==0&&item%2==1)))

    </script>
</body>
</html>